import com.spire.doc.Document;
import com.spire.doc.documents.TextSelection;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.general.find.PdfTextFind;

import java.io.File;
import java.util.HashSet;

public class Main {
    //统计文件个数
    static int count = 0;
    static HashSet<String> keyWords = new HashSet<String>();

    public static void main(String[] args) throws Exception {
        long startTime = System.currentTimeMillis();    //获取开始时间


        //===================配置部分=================
        //搜索关键字 可以设置多个
        keyWords.add("测试");
        //文件根路径
        getFilePath("/Users/huej/file/TestDocJava");
        //===================配置部分=================


        System.out.println("一共搜索" + count + "个文件");
        long endTime = System.currentTimeMillis();    //获取结束时间
        System.out.println("程序运行时间：" + (endTime - startTime)/1000 + "s");    //输出程序运行时间
    }

    /**
     * @param rootPath
     * @throws Exception
     */
    public static void getFilePath(String rootPath) throws Exception {
        File file = new File(rootPath);
        if (file.exists()) {
            if (file.isDirectory()) {
                String[] fileNames = file.list();
                for (String fileName : fileNames) {
                    getFilePath(rootPath + "/" + fileName);
                }
            } else {
                //符合过滤条件
                String fileType = filterFileType(file.getName());
                if (!"#false#".equals(fileType)) {
                    count++;
                    doFindFile(rootPath, fileType);
                }
            }
        } else {
            throw new Exception("文件不存在请确认!");
        }
    }

    /**
     * 根据文件类型调用不同的方法
     *
     * @param filePath
     * @return
     */
    public static void doFindFile(String filePath, String fileType) {
        if (".doc".equals(fileType) || ".docx".equals(fileType)) {
            doWord(filePath);
        } else if (".pdf".equals(fileType) || ".PDF".equals(fileType)) {
            doPdf(filePath);
        } else {
            System.out.println("未处理文件:" + filePath);
        }
    }

    /**
     * 处理pdf文件
     *
     * @param filePath
     */
    private static void doPdf(String filePath) {
        PdfDocument pdf = new PdfDocument(filePath);
        PdfTextFind[] result = null;
        for (PdfPageBase page : (Iterable<PdfPageBase>) pdf.getPages()) {
            for (String keyWord : keyWords) {
                int count = page.findText(keyWord).getFinds().length;
                if (count > 0) {
                    System.out.println(filePath + "---------pdf--------" + keyWord);
                    return;
                }
            }
        }
    }

    /**
     * 处理word文件
     *
     * @param filePath xx
     */
    public static void doWord(String filePath) {
        Document document = new Document(filePath);
        for (String keyWord : keyWords) {
            TextSelection[] allString = document.findAllString(keyWord, false, false);
            if (!(null == allString)) {
                System.out.println(filePath + "---------word--------" + keyWord);
            }
        }
    }

    /**
     * 按文件类型过滤文件,如果符合条件返回文件类型  如果符合条件则返回#false#
     *
     * @param fileName xx
     * @return xx
     */
    public static String filterFileType(String fileName) {
        String fileType = "";

        int i = fileName.lastIndexOf(".");
        fileType = fileName.substring(i);
        HashSet<String> filterFileTypes = new HashSet<String>();
        //设置过滤文件的类型
        filterFileTypes.add(".jpg");
        filterFileTypes.add(".JPG");
        filterFileTypes.add(".png");
        filterFileTypes.add(".dps");
        if (filterFileTypes.contains(fileType)) {
            return "#false#";
        } else {
            return fileType;
        }
    }
}
